/**
 * 遍历元素
 * @param e 要遍历的元素
 * @param callback 回调函数（元素，层级）
 */
function eachElement(e,callback) {
    eachChildElement(e, 0, callback);
}

function eachChildElement(element, level, callback) {
    var childNodes = element.childNodes;
    for (var i = 0; i < childNodes.length; i++) {
        //当前节点
        var e = childNodes[i];

        //文本、注释节点不被遍历，并判断其是否为直接父节点
        if (e.parentNode === element && e.nodeType === 1) {
            if (callback) {
                callback(e, level)
            }
            eachChildElement(e, level + 1, callback);
        }
    }
}


/**
 * 字符串格式化
 * stringFormat('ab{0}cd','A')
 */
function stringFormat()
{
    if (arguments.length == 0)
        return null;
    var str = arguments[0];
    for (var i = 1; i < arguments.length; i++)
    {
        var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
        str = str.replace(re, arguments[i]);
    }
    return str;
}
